#!/bin/bash

# MySQL MCP Server 本地Docker构建脚本
# 当网络无法访问Docker Hub时的替代方案

set -e

echo "=== MySQL MCP Server 本地Docker构建 ==="

# 检查Docker是否运行
if ! docker info > /dev/null 2>&1; then
    echo "❌ Docker未运行，请启动Docker Desktop"
    exit 1
fi

echo "✓ Docker运行正常"

# 创建本地构建目录
BUILD_DIR="./docker-build"
rm -rf "$BUILD_DIR"
mkdir -p "$BUILD_DIR"

echo "✓ 创建构建目录: $BUILD_DIR"

# 复制必要文件
cp -r src/ "$BUILD_DIR/"
cp requirements.txt "$BUILD_DIR/"
cp setup.py "$BUILD_DIR/"
cp README.md "$BUILD_DIR/" 2>/dev/null || echo "README.md not found, skipping"
cp LICENSE "$BUILD_DIR/" 2>/dev/null || echo "LICENSE not found, skipping"

echo "✓ 复制项目文件"

# 创建简化的Dockerfile（使用本地Python环境）
cat > "$BUILD_DIR/Dockerfile" << 'EOF'
# 使用系统Python环境的简化Dockerfile
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 设置环境变量
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1

# 安装系统依赖（最小化）
RUN apt-get update && apt-get install -y \
    gcc \
    default-libmysqlclient-dev \
    pkg-config \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean

# 复制需求文件并安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt

# 复制项目文件
COPY src/ ./src/
COPY setup.py .

# 安装项目
RUN pip install -e .

# 创建启动脚本
RUN echo '#!/bin/bash\npython -m src.mysql_mcp_server.main "$@"' > /app/start.sh
RUN chmod +x /app/start.sh

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD python -c "import src.mysql_mcp_server; print('健康检查通过')" || exit 1

# 设置默认命令
ENTRYPOINT ["/app/start.sh"]
CMD ["--help"]
EOF

echo "✓ 创建简化Dockerfile"

# 尝试构建镜像
echo "开始构建Docker镜像..."
cd "$BUILD_DIR"

if docker build -t mysql-mcp-server:local .; then
    echo "✅ Docker镜像构建成功!"
    
    # 测试镜像
    echo "测试Docker镜像..."
    if docker run --rm mysql-mcp-server:local --help; then
        echo "✅ Docker镜像测试成功!"
    else
        echo "⚠️ Docker镜像测试失败，但镜像已构建"
    fi
    
    # 创建运行脚本
    cd ..
    cat > run-docker.sh << 'EOF'
#!/bin/bash

# MySQL MCP Server Docker运行脚本

echo "=== 运行 MySQL MCP Server Docker容器 ==="

# 检查镜像是否存在
if ! docker image inspect mysql-mcp-server:local > /dev/null 2>&1; then
    echo "❌ Docker镜像不存在，请先运行 ./local-docker-build.sh"
    exit 1
fi

# 运行容器
echo "启动容器..."
docker run --rm -it \
    --name mysql-mcp-server \
    -e MYSQL_HOST="${MYSQL_HOST:-localhost}" \
    -e MYSQL_PORT="${MYSQL_PORT:-3306}" \
    -e MYSQL_USER="${MYSQL_USER:-root}" \
    -e MYSQL_PASSWORD="${MYSQL_PASSWORD:-}" \
    -e MYSQL_DATABASE="${MYSQL_DATABASE:-}" \
    mysql-mcp-server:local "$@"
EOF
    
    chmod +x run-docker.sh
    echo "✓ 创建运行脚本: run-docker.sh"
    
    echo ""
    echo "=== 构建完成 ==="
    echo "Docker镜像: mysql-mcp-server:local"
    echo "运行方式:"
    echo "  ./run-docker.sh --help"
    echo "  ./run-docker.sh [其他参数]"
    echo ""
    echo "或直接使用Docker:"
    echo "  docker run --rm mysql-mcp-server:local --help"
    
else
    echo "❌ Docker镜像构建失败"
    exit 1
fi